注意:所有文章除特别说明外,转载请注明出处.
简介
该模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
场景
1. 访问一个集合对象的内容而无需暴露它内部表示。
2. 遍历不同的集合结构提供统一的接口。
优点
1. 分离集合对象的遍历行为
缺点
1. 类的个数成对增加
相关设计模式
1. 迭代器模式与访问者模式
注意:迭代器模式分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可以让外部程序透明的访问集合内的数据。
迭代器模式
1.创建接口
public interface Iterator {
public boolean hasNext();
public Object next();
}
public interface Container {
public Iterator getIterator();
}
2.创建实现 Container 接口的实体类 该类有实现了 Iterator 接口的内部类 NameIterator
public class NameRepository implements Container {
public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};
@Override
public Iterator getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator {
int index;
@Override
public boolean hasNext() {
if(index < names.length){
return true;
}
return false;
}
@Override
public Object next() {
if(this.hasNext()){
return names[index++];
}
return null;
}
}
}
3.使用 NameRepository 来获取迭代器 并打印名字
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
String name = (String)iter.next();
System.out.println("Name : " + name);
}
}
}
总结
提示:聚合对象拥有两个职责:1.存储数据。2.遍历数据。
可以将遍历数据的行为从聚合对象中分离出来,封装在一个被称之为“迭代器”的对象中,由迭代器来提供遍历聚合对象内部数据的行为。
迭代器模式提供一种方法来访问聚合对象,不用暴露这个对象的内部表示。
将遍历聚合对象中数据的行为提取出来,封装到一个迭代器中,通过专门的迭代器来遍历聚合对象的内部数据。